package com.leetCode.easy;

import java.util.Arrays;

/**
 * 旋转数组的最小数字
 */
public class MinArray {
    //此方法对数据量大的运行很慢，还是要使用二分法
    public int minArray(int[] numbers) {
        //先进行排序
        Arrays.sort(numbers);
        return numbers[0];
    }

    public int minArray2(int[] numbers) {
        //定义最小索引
        int min = 0;
        //最大索引
        int max = numbers.length-1;
        //当最小索引小于最大索引时，一直循环
        while (min < max) {
            //取中间值
            int point = min + (max-min)/2;
            //判断中间值小于最大索引时，说明数组最小值在最小索引与中间索引间
            if (numbers[point] < numbers[max]) {
                max = point;
            } else if (numbers[point] > numbers[max]) {
                //中间索引值大于最大索引值,故最小值在中级索引+1到最大索引，
                min = point+1;
            } else {
                //相等时，无法判断，将最大索引减1，最小值必在其间
                max -= 1;
            }
        }
        return numbers[min];
    }
}
